void main() {

  //List: 数组
  //两种声明方式: 字面量 & 构造函数
  //扩展操作符 ...




  // 声明List - 字面量
  List list1 = ['a', 'b', 'c'];
  // 在Dart中, 同一个数组中可以存放不同类型的数据
  List list2 = ['a', 'b', 'c', 1, 2, 3];
  //限定类型的数组的声明
  List list3 = <int>[1, 2, 3];
  print(list1);
  print(list2);
  print(list3);
  // 通过构造函数的声明方式, growable设置为true,才能添加数据
  var list4 = new List.empty(growable: true);
  list4.add(3);
  print(list4);

  //通过填充的方式声明
  var list5 = new List.filled(3, 6);
  print(list5);

  //扩展操作符: list6的最终结果为 8, 6,6,6
  var list6 = [8, ...list5];
  print(list6);

  //列表翻转: 结果为: (6, 6, 6, 8), 小括号表示不再是一个List
  print(list6.reversed);

  //翻转后它不再是一个list, 只有通过 toList方法才是一个数组
  print(list6.reversed.toList());

  //合并元素
  List words = ['Hello', 'world'];
  print(words.join('-'));

  //数组的遍历
  for (var i = 0; i < list6.length; i++) {
    print(list6[i]);
  }
  for (var item in list6) {
    print('item $item');
  }
  //1. forEach
  list6.forEach((element) {
    print(element);
  });
  //2. map 遍历并处理元素,形成新的List
  var newList6 = list6.map((e) {
    return e * e;
  });
  print(newList6.toList());

  //3.where 返回符合条件的元素
  bool isOdd(n) => n % 2 == 1; //判断是否为奇数
  var listwhere = list3.where((element) => isOdd(element));
  print(listwhere.toList());

  //4.any 来检测数组中是否有符合的数据
  //判断数组中是否有奇数
  print(list3.any((element) => isOdd(element)));

  //5.every 判断数组中的所有数据是否都符合某个条件
  print(list3.every((element) => isOdd(element)));

  //6.扩展 expand:
  var pairs = [
    [1, 2],
    [3, 4]
  ];
  //将二维数组 降维
  var flattend = pairs.expand((element) => element).toList();
  print(flattend);

  //7.折叠 fold
  // var result = list3.fold(2, (int p, element) => p * element);
  // print(result);
}
